package com.dyylearn.servlet;

import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.concurrent.ConcurrentHashMap;

public class DBServlet extends HttpServlet {
    /**
     * 梳理ServLetConfig config使用流程
     * 1.当DBServLet对象初始化时，tomcat会同时创建一个ServLetConfig对象
     * 2.这时如果DBServLet init())方法中你调用super.init(config)；
     * 3.调用 父类 GenericServlet
     *     public void init(ServletConfig config) throws ServletException {
     *         this.config = config;
     *         this.init();
     *     }
     * 这时就会把Tomcat创建的ServLetConfig对象赋给GenericServLet的属性config
     * 4.因此如果你重写init（）方法，记住如果你想在其它方法通过getServLetConfig（）方法获取ServLetConfig
     * 则一定要记住调用super.init（config）;
     * @param config
     * @throws ServletException
     */
    @Override
    public void init(ServletConfig config) throws ServletException {
//        ConcurrentHashMap, 是一个线程安全的容器
        //        System.out.println("init " + config);
        super.init(config);
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //2.在DBServlet执行doGet()/doPost()时，可以获取到web.xml配置的用户名和密码
        //你是一个00P程序员->现有的方法或对象来搞定
        //DBServlet的父类GenericServlet有getServletConfig()
        /**
         * 1.getServletConfig()方法是GenericServlet
         * 2.返回的servletConfig对象是GenericServlet private transient ServletConfig config;
         * 3.当一个属性被transient修饰，表示该属性不会被串行化（有些重要信息，不希望保存到文件)
         */
        ServletConfig servletConfig = getServletConfig();
        String username = servletConfig.getInitParameter("username");
        String pwd = servletConfig.getInitParameter("pwd");
        System.out.println("初始化参数username=" + username);
        System.out.println("初始化参数pwd=" + pwd);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    }
}
